Computer systems typically employ a compiler that may combine files located in different portions of the computer system, such as in the computer system memory. Compiling a source file creates an intermediate code stream, which is then translated to an object code file corresponding to compiler directives associated with the source code file. It will be appreciated that compiler directives may be instructions or data that affect the manner of compilation, thereby determining the result of the compilation. For instance, compiler directives may be used to manage the compilation of source code. Minimizing the amount of intermediate code optimized and compiled during the process of transforming intermediate code streams into object code reduces the computer system resources used by the compiler system. That is, the efficiency of a compiler may be improved by minimizing the amount of computer resources required to complete compilation of intermediate code streams into the resulting object code files for execution on the computer system.
Improvement in the efficiency of compiler systems has been hindered by the time and computer resources required compiling intermediate code streams into object code files. Therefore, there has been a need to selectively reuse parts of object code files when portions of the intermediate code stream that affect the resulting object code file, such as compiler directives, have not changed between invocations of the compiler. The problem with current incremental compilation systems is that most of the compilation time is wasted. The incremental compilation system wastes many builds due to overly conservative inputs to the recompilation decision. In particular, typical source file time stamp based systems cannot limit the scope of recompilation for any potentially large scoped changes such as header file edits. Thus, a heretofore unaddressed need exists in the industry to address the inefficiences and inadequacies of existing compilation systems.